/**
 * ReportGear(2011)
 */
package com.reportgear.core.util;

import java.util.List;

import com.reportgear.core.api.Cloneable;

/**
 * 系统核心实用类
 * 
 * @version 1.0 2011-5-8
 * @author <a herf="lexloo@gmail.com">lexloo</a>
 * @since Report 1.0
 */
public class BaseUtils {

	/**
	 * 列表克隆复制 (深度克隆)
	 * 
	 * @param <T>
	 *            列表元素类型
	 * @param src
	 *            源列表
	 * @return 目标列表
	 */
	@SuppressWarnings("unchecked")
	public static <T> List<T> copyList(List<T> src) {
		List<T> result;

		try {
			result = src.getClass().newInstance();

			for (T el : src) {
				if (el instanceof Cloneable) {
					result.add((T) ((Cloneable) el).clone());
				} else {
					result.add(el);
				}
			}

			return result;
		} catch (InstantiationException e) {
			throw new InternalError();
		} catch (IllegalAccessException e) {
			throw new InternalError();
		}
	}
}
